package com.zxk.service.impl;

import com.sun.jna.platform.win32.WinDef;
import com.zxk.constant.ParamConstants;
import com.zxk.constant.PicConstants;
import com.zxk.enums.Coord;
import com.zxk.service.AbstractMyTask;
import com.zxk.util.FuzzyPicUtil;
import com.zxk.util.MouseUtil;
import com.zxk.util.PixelPicUtil;
import com.zxk.util.ThreadUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 使用宝图任务
 *
 * @author: 舟小亢
 * @date: 2023-08-27 15:09
 */
public class UseMapTaskImpl extends AbstractMyTask {

    private static Logger LOG = LoggerFactory.getLogger(UseMapTaskImpl.class);


    public UseMapTaskImpl(WinDef.HWND hwnd_0, WinDef.HWND hwnd_1, WinDef.HWND hwnd_2) {
        super(hwnd_0, hwnd_1, hwnd_2);
    }

    @Override
    public String getTaskName() throws Exception {
        return "使用宝图";
    }

    @Override
    public boolean execute() throws Exception {
        LOG.warn("【使用宝图任务】开始！");

        // 查找并点击包裹
        if (!FuzzyPicUtil.findAndClickRandom(hwnd_0, hwnd_1, PicConstants.使用宝图_包裹, 0.8)) {
            return false;
        }
        ThreadUtil.sleep1();

        // 整理包裹
        FuzzyPicUtil.findAndClickRandom(hwnd_0, hwnd_1, PicConstants.公共_整理, 5, 0.8);

        // 将屏幕拉到最上方,查找藏宝图
        MouseUtil.dragMove(hwnd_1, Coord.PACKAGE_WHELL.getX(), Coord.PACKAGE_WHELL.getY(), 0, 1000);

        for (int i = 0; i < 5; i++) {
            pic = FuzzyPicUtil.findPic(hwnd_0, PicConstants.使用宝图_宝图, 1);
            if (pic.isFinded()) {
                break;
            }
            // 如果没找到下拉滑动屏幕寻找图标
            MouseUtil.dragMove(hwnd_1, Coord.PACKAGE_WHELL.getX(), Coord.PACKAGE_WHELL.getY(), 0, -150);
            if (i == 4) {
                LOG.info("【使用宝图任务】未找到宝图，任务完成");
                return false;
            }
        }
        // 点击藏宝图
        MouseUtil.lClickRandom(hwnd_1,
                pic.getPicX(),
                pic.getPicY());
        // 点击使用0
        if (!FuzzyPicUtil.findAndClickRandom(hwnd_0, hwnd_1, PicConstants.使用宝图_使用0, 5)) {
            return false;
        }

        return true;
    }

    @Override
    public boolean checkTask() throws Exception {
        // 循环点击使用1，直到完成
        for (int i = 0; i < 50; i++) {
            LOG.info("【使用宝图任务】查找第{}次", i + 1);
            // 如果没找到宝图图标，去包裹中先查找
            if (!FuzzyPicUtil.findPic(hwnd_0, PicConstants.使用宝图_取消使用, 3).isFinded()) {
                LOG.info("【使用宝图任务】未找到宝图，包裹中查找");
                this.goHome();
                if (!this.execute()) {
                    // 如果没找到说明已使用完
                    return false;
                }
                ThreadUtil.sleep(6000);
            }
            // 如果不是宝图
            if (FuzzyPicUtil.findPic(hwnd_0, PicConstants.使用宝图_取消使用, 3).isFinded()
                    && !FuzzyPicUtil.findPic(hwnd_0, PicConstants.使用宝图_宝图识别, 3).isFinded()) {
                LOG.info("【使用宝图任务】未找到宝图，取消本次使用");
                FuzzyPicUtil.findAndClickRandom(hwnd_0, hwnd_1, PicConstants.使用宝图_取消使用, 3);
            } else {
                FuzzyPicUtil.findAndClickRandom(hwnd_0, hwnd_1, PicConstants.使用宝图_使用1);
            }
            while (FuzzyPicUtil.findPic(hwnd_0, PicConstants.公共_战斗中, 3).isFinded()) {
                // 没找到战斗中就等5s
                ThreadUtil.sleep(5000);
            }
            ThreadUtil.sleep(6000);
        }
        LOG.info("【使用宝图任务】完成！");
        return true;
    }
}
